package cn.huixh.code.groupanagrams;

import cn.huixh.code.common.BaseTest;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;


/**
 * title 字母异位词分组
 * description 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *【把字母数量相同的字符串分到一组】示例：["nat","tan"]都是一个a，一个n，一个t，所以分到一组。["ate","eat","tea"]都是一个a，一个e，一个t，所以分到一组。
 * ["nat","tan"]都是一个a，一个n，一个t，所以分到一组。["ate","eat","tea"]都是一个a，一个e，一个t，所以分到一组。
 * example 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 * example 输入: 输入: strs = [""] 输出: [[""]]
 * example 输入: strs = ["a"] 输出: [["a"]]
 */
public class Solution extends BaseTest {
    @Test
    public void groupAnagramsTest() {

        String[] strs = {"eat","tea","tan","ate","nat","bat"};

        List<List<String>> groupAnagrams = Solution.groupAnagrams(strs);

        System.out.println(groupAnagrams);

    }

    public static List<List<String>> groupAnagrams(String[] strs) {

        HashMap<String,List<String>> hashTable = new HashMap<>(strs.length);

        for (String str : strs) {
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String value = new String(charArray);
            if (hashTable.containsKey(value)) {
                hashTable.get(value).add(str);
            } else {
                ArrayList<String> strList = new ArrayList<>();
                strList.add(str);
                hashTable.put(value,strList);
            }
        }
        ArrayList<List<String>> objects = new ArrayList<>();

        hashTable.forEach((integer, strings) -> {
            objects.add(strings);
        });

        return objects;
    }
}
